package Interface;

import java.io.IOException;
import java.net.URISyntaxException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;

import DTO.CarrierVO;
import DTO.ClienteEmpresaVO;
import DTO.ClienteParticularVO;
import DTO.ClienteVO;
import DTO.CuentaCorrienteVO;
import DTO.DireccionVO;
import DTO.EmpleadoVO;
import DTO.EmpresaSeguridadVO;
import DTO.EmpresaSegurosVO;
import DTO.EncomiendaVO;
import DTO.EnvioInternacionalVO;
import DTO.EnvioInternoVO;
import DTO.EnvioUrgenteVO;
import DTO.ItemEnvioVO;
import DTO.MantenimientoKilometrajeVO;
import DTO.MantenimientoTiempoVO;
import DTO.PaqueteVO;
import DTO.PlanMantenimientoVO;
import DTO.ProductoLogisticaVO;
import DTO.ProveedorVO;
import DTO.ServicioBasicoVO;
import DTO.ServicioGranelVO;
import DTO.ServicioLogisticaVO;
import DTO.ServicioVO;
import DTO.SucursalVO;
import DTO.TallerGeneralVO;
import DTO.TallerOficialVO;
import DTO.TareaMantenimientoVO;
import DTO.UsuarioVO;
import DTO.VehiculoVO;
import DTO.ViajeVO;
import Exception.NoExisteException;

public interface TDAManejoDatos extends Remote 	{
	
	public static final String url = "localhost/GestionLogisticaCentral";
	
	//Sucursal
	public void altaSucursal(SucursalVO suc) throws RemoteException;
	public void modificaSucursal(SucursalVO suc) throws RemoteException;
	public void bajaSucursal(int id) throws RemoteException;
	public SucursalVO buscaSucursal(int id) throws RemoteException;
	public ArrayList<SucursalVO> buscarSucursales() throws RemoteException;
	
	//Empleado
	public void altaEmpleado(EmpleadoVO e) throws RemoteException;
	public void modificarEmpleado(EmpleadoVO e) throws RemoteException;
	public void bajaEmpleado(int dni) throws RemoteException;
	public EmpleadoVO buscaEmpleado(int dni) throws RemoteException;
	
	//Usuario
	public void altaUsuario(UsuarioVO u) throws RemoteException;
	public void bajaUsuario(UsuarioVO u) throws RemoteException;
	public UsuarioVO validarUsuario(String usuario, String pass) throws RemoteException; 
	
	//Servicios
	public int altaServicioBasico (ServicioBasicoVO ser) throws RemoteException;
	public void modificaServicioBasico (ServicioBasicoVO ser) throws RemoteException;
	public void bajaServicioBasico (String nombre) throws RemoteException;
	public ServicioBasicoVO buscaServicioBasico (String nombre) throws RemoteException;
	
	public int altaServicioGranel (ServicioGranelVO ser) throws RemoteException;
	public void modificaServicioGranel (ServicioGranelVO ser) throws RemoteException;
	public void bajaServicioGranel (String nombre) throws RemoteException;
	public ServicioGranelVO buscaServicioGranel (String nombre) throws RemoteException;
	
	public int altaServicioLogistica (ServicioLogisticaVO ser) throws RemoteException;
	public void modificaServicioLogistica (ServicioLogisticaVO ser) throws RemoteException;
	public void bajaServicioLogistica (String nombre) throws RemoteException;
	public ServicioLogisticaVO buscaServicioLogistica (String nombre) throws RemoteException;
	
	//Vehiculos	
	public void altaVehiculo(VehiculoVO ve) throws RemoteException;
	public void modificaVehiculo(VehiculoVO ve) throws RemoteException;
	public void bajaVehiculo(String patente) throws RemoteException;
	public VehiculoVO buscaVehiculo(String patente) throws RemoteException;
	
	//Envios
	public int altaEnvioInterno(EnvioInternoVO eiVO) throws RemoteException;
	public int altaEnvioUrgente(EnvioUrgenteVO euVO) throws RemoteException;
	public int altaEnvioInternacional(EnvioInternacionalVO eiVO) throws RemoteException;
	public void asociarEnvioASucursal(int eiID, int idSuc) throws RemoteException;
	
	//Viajes
	public boolean crearViajeInterSucursal(int idEncomienda, int idEnvio) throws RemoteException;
	public boolean crearViajeOrigenSucursal(int idEncomienda, int idEnvio, int idSuc) throws RemoteException;
	public boolean crearViajeSucursalDestino(int idEncomienda, int idEnvio, int idSuc) throws RemoteException;
	
	//Vehiculos
	public boolean asignarPlanMantenimiento(String patente, int idPlan) throws RemoteException;
	public Collection<TareaMantenimientoVO> aplicarPlanMantenimiento(String patente) throws RemoteException;
	
	//Planes mantenimiento
	public void altaPlanMantenimiento(PlanMantenimientoVO pm) throws RemoteException;
	public void modificaPlanMantenimiento(PlanMantenimientoVO pm) throws RemoteException;
	public void bajaPlanMantenimiento(int id) throws RemoteException;
	public PlanMantenimientoVO buscaPlanMantenimiento(int id) throws RemoteException;

	//Tareas
	public void agregarTareaMantenimientoKm(PlanMantenimientoVO planVO, ProveedorVO provVO, MantenimientoKilometrajeVO mk) throws RemoteException;
		
	//Clientes particular y empresas - 
	public void agregarClienteParticular(ClienteParticularVO a, DireccionVO dir) throws RemoteException;
	public void modificaClienteParticular(ClienteParticularVO a) throws RemoteException;
	public void bajaClienteParticular(ClienteParticularVO a) throws RemoteException;
	public ClienteParticularVO buscaClienteParticular(int dni) throws RemoteException;
	
	public void agregarClienteEmpresa(ClienteEmpresaVO eVO, DireccionVO dVO, CuentaCorrienteVO cVO) throws RemoteException;
	public void modificaClienteEmpresa(ClienteEmpresaVO a) throws RemoteException;
	public void bajaClienteEmpresa(ClienteEmpresaVO a) throws RemoteException;
	public ClienteEmpresaVO buscaClienteEmpresa(long cuit) throws RemoteException;
	
	//Proveedores
	public void altaEmpresaSeguridad (EmpresaSeguridadVO emp) throws RemoteException;
	public void modificaEmpresaSeguridad (EmpresaSeguridadVO emp) throws RemoteException;
	public void bajaEmpresaSeguridad (long cuit) throws RemoteException;
	public EmpresaSeguridadVO buscaEmpresaSeguridad (long cuit) throws RemoteException;
	
	public void altaEmpresaSeguros (EmpresaSegurosVO emp) throws RemoteException;
	public void modificaEmpresaSeguros (EmpresaSegurosVO emp) throws RemoteException;
	public void bajaEmpresaSeguros (long cuit) throws RemoteException;
	public EmpresaSegurosVO buscaEmpresaSeguros (long cuit) throws RemoteException;
	
	public void altaTallerOficial (TallerOficialVO taller) throws RemoteException;
	public void modificaTallerOficial (TallerOficialVO taller) throws RemoteException;
	public void bajaTallerOficial (long cuit) throws RemoteException;
	public TallerOficialVO buscaTallerOficial (long cuit) throws RemoteException;
	
	public void altaTallerGeneral (TallerGeneralVO taller) throws RemoteException;
	public void modificaTallerGeneral (TallerGeneralVO taller) throws RemoteException;
	public void bajaTallerGeneral (long cuit) throws RemoteException;
	public TallerGeneralVO buscaTallerGeneral (long cuit) throws RemoteException;
	
	public void altaCarrier (CarrierVO car) throws RemoteException;
	public void modificaCarrier (CarrierVO car) throws RemoteException;
	public void bajaCarrier (long cuit) throws RemoteException;
	public CarrierVO buscaCarrier (long cuit) throws RemoteException;
		
	//Negocio
	public ArrayList<ClienteVO> obtengoClientes() throws RemoteException;	
	public Integer nuevaEncomienda (int idSucursal, EncomiendaVO en, ServicioVO servicio, DireccionVO origen, DireccionVO destino, DireccionVO actual) throws RemoteException, IOException, URISyntaxException, NoExisteException;
	public void pagarFacturaParticular(int numero, int idEncomienda) throws RemoteException;
	public int pagarFacturaEmpresa(int idEncomienda, int numero, long cuit) throws RemoteException;
	public EmpleadoVO buscaEmpleadoDeUsuario(String usuario) throws RemoteException;
	public ArrayList<ViajeVO> agregarEncomiendaAEnvio(int idEncomienda, int idEnvio, int idSuc) throws RemoteException;
	public int agregarPaqueteAEncomienda(int idEncomienda,PaqueteVO paquete, ItemEnvioVO item) throws RemoteException;
	public int facturar(int idEncomienda) throws RemoteException;
	public int agregarProductoLogistica(int idEncomienda, ProductoLogisticaVO prodlogVO) throws RemoteException;
	}
